package cn.demoncat.util.mall.ehsy.entity;

import cn.demoncat.util.http.JsoupUtil;
import cn.demoncat.util.lang.CollectionUtil;
import cn.demoncat.util.lang.IntegerUtil;
import cn.demoncat.util.lang.constant.StatusConstant;
import cn.demoncat.util.lang.constant.StringConstant;
import cn.demoncat.util.lang.entity.NameValue;
import lombok.Data;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

/**
 * 获取商品详细信息
 *
 * @author 延晓磊
 * @since 2022年07月25日
 */
@Data
public class EhsyGetDetailResult extends EhsyResult{

    private EhsyGetDetailResult.Body result;

    @Data
    public static class Body{

        // 商品编号
        private String sku;
        // 重量（NULL）
        private String weight;
        // 主图地址
        private String imagePath;
        // 品牌中文名称
        private String brandName;
        // 品牌图片（NULL）
        private String brandPic;
        // 商品名称：包含"名称"和"属性"，建议200长度
        private String name;
        // 类目：四级类目数组（经西域关联，此处返回我方类目编码）
        private List<String> category;
        // 最小起订量
        private Integer moq;
        // 制造商型号
        private String mfgSku;
        // 货期（NULL）：天，0表示询货期
        private Integer deliveryTime;
        // 是否允许退换货（NULL）：0允许（默认）、1不允许；标记'是否支持7天无理由退货'，不影响售后申请
        private String isReturn;
        // 商品描述（NULL）：HTML页面
        private String introduction;
        // 包装信息（NULL）：HTML页面
        private String wareQD;
        // 销售单位
        private String saleUnit;
        // 使用单位（NULL）
        private String settleUnit;
        // 销售单位和使用单位的数量关系（NULL）
        private String wareNum;
        // 税收分类编码（NULL）
        private String taxCode;
        // 规格属性
        private List<Param> param;


        @Data
        public static class Param{

            // 编码（NULL）
            private String attrCode;
            // 名称
            private String attrName;
            // 值
            private String attrValue;
            // 排序
            private Integer attrSeq;
            // 属性组编码（NULL）
            private String attrGroupCode;
            // 属性组名称（NULL）
            private String attrGroupName;
            // 属性组排序（NULL）
            private String attrGroupSeq;

        }

        /**
         * 转换规格属性（param）为 List
         *
         * @return {参数:名称}
         *
         * @author 延晓磊
         * @since 2022年07月27日
         */
        public List<NameValue> toParamList(){
            List<NameValue> list = new ArrayList<>();
            if (CollectionUtils.isNotEmpty(this.getParam())) {
                for (Param param : CollectionUtil.sort(this.getParam(), Comparator.comparing(o -> IntegerUtil.toEmpty(o.getAttrSeq())))) {
                    list.add(new NameValue(param.getAttrName(), param.getAttrValue()));
                }
            }
            return list;
        }

        /**
         * 转换包装信息（wareQD）为 List
         *
         * @return {参数:值}
         *
         * @author 延晓磊
         * @since 2023年03月28日
         */
        public List<NameValue> toPackList(){
            List<NameValue> list = new ArrayList<>();
            if (StringUtils.isNotBlank(this.getWareQD())) {
                // 获取 tr
                Elements trs = JsoupUtil.html(this.getWareQD()).getElementsByTag("tr");
                Elements tds;
                for (int i = 1; i < trs.size(); i++) {
                    // 获取 td
                    tds = trs.get(i).getElementsByTag("td");
                    list.add(new NameValue(tds.get(0).text(), tds.get(1).text()));
                }
            }
            return list;
        }

        /**
         * 转换为干净的详情（introduction）
         *
         * @return 详情HTML：去除style，以免影响整体页面样式
         *
         * @author 延晓磊
         * @since 2023年03月28日
         */
        public String toCleanDetail(){
            if (StringUtils.isBlank(this.introduction)) {
                return StringConstant.EMPTY;
            }
            // 获取文档
            Document doc = JsoupUtil.html(this.introduction);
            // 去除style
            doc.head().getElementsByTag("style").remove();
            // 输出文档
            return doc.html().trim();
        }

        /**
         * 是否允许退换货
         *
         * @return 1允许、0不允许；标记'是否支持7天无理由退货'，不影响售后申请
         *
         * @author 延晓磊
         * @since 2022年07月27日
         */
        public String getStandardReturnStatus(){
            return StatusConstant.Common.isYes(this.getIsReturn()) ? StatusConstant.Common.NO : StatusConstant.Common.YES;
        }
    }


}

